/**
 * Scope接口定义了在特定作用域内管理对象的方法
 * 它提供了获取对象、移除对象、注册对象销毁回调以及获取会话标识的功能
 */
package com.test.scope;

/**
 * Scope接口，用于管理对象的作用域
 * 它提供了一组方法来处理对象的生命周期管理，包括获取对象、移除对象和注册销毁回调
 */
public interface Scope {
    /**
     * 根据名称和对象工厂获取对象
     * 如果对象已经存在，则使用现有的对象，否则通过对象工厂创建新的对象
     *
     * @param name          对象的名称
     * @param objectFactory 对象工厂，用于创建新对象
     * @return 返回获取到的或新创建的对象
     */
    Object get(String name, ObjectFactory<?> objectFactory);

    /**
     * 根据名称移除作用域中的对象
     * 如果对象存在，则移除并返回该对象；否则返回null
     *
     * @param name 要移除的对象的名称
     * @return 返回被移除的对象，如果不存在则返回null
     */
    Object remove(String name);

    /**
     * 注册一个在对象销毁时调用的回调函数
     * 当对象不再需要时，可以通过这个回调函数执行一些清理工作
     *
     * @param name   对象的名称
     * @param callback 对象销毁时调用的回调函数
     */
    void registerDestructionCallback(String name, Runnable callback);

    /**
     * 获取当前会话的标识
     * 会话标识用于区分不同的会话，以便正确管理对象的生命周期
     *
     * @return 返回当前会话的标识
     */
    String getConversationId();
}
